import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import { IsEnum, IsNotEmpty } from "class-validator";
import { PageType } from "../entities/menu.entity";
import { DiffDto } from "src/common/dto/dto";

export class CreateMenuDto extends DiffDto {
    /** 菜单名称 */
    @IsNotEmpty({ message: '菜单名称不能为空' })
    @ApiProperty({
        type: String,
        name: 'name',
        description: '菜单名称',
    })
    public readonly name: string;
    /** 路径 */
    @IsNotEmpty({ message: '路径不能为空' })
    @ApiProperty({
        type: String,
        name: 'path',
        description: '路径',
    })
    public readonly path: string;

    /** 路由别名 */
    @IsNotEmpty({ message: '路由别名不能为空' })
    @ApiProperty({
        type: String,
        name: 'route',
        description: '路由别名',
    })
    public readonly route: string;

    /** 排序 */
    @IsNotEmpty({ message: '排序不能为空' })
    @ApiProperty({
        type: Number,
        name: 'sort',
        description: '排序',
    })
    public readonly sort: number;

    /** 页面类型 */
    @IsEnum(PageType, { message: `只能传入: ${PageType}` }) //枚举
    @IsNotEmpty({ message: '页面类型' })
    @ApiProperty({
        type: String,
        name: 'type',
        description: '页面类型',
        enum: PageType,
    })
    public readonly type?: PageType;

    /** 是否可用。2：否，1：是 */
    @IsEnum([1, 2], { message: '只能传入1, 2' }) //枚举
    @IsNotEmpty({ message: '是否可用。2：否，1：是' })
    @ApiProperty({
        type: String,
        name: 'is_use',
        description: '是否可用。2：否，1：是',
        enum: [1, 2],
    })
    public readonly is_use?: string;

    /** 是否在导航栏显示。0：否，1：是 */
    @IsEnum([1, 2], { message: '只能传入1, 2' }) //枚举
    @IsNotEmpty({ message: '是否在导航栏显示。0：否，1：是' })
    @ApiProperty({
        type: String,
        name: 'is_navbar',
        description: '是否在导航栏显示。0：否，1：是',
        enum: [1, 2],
    })
    public readonly is_navbar?: string;

    /** 描述 */
    @IsNotEmpty({ message: '描述不能为空' })
    @ApiProperty({
        type: String,
        name: 'description',
        description: '描述',
    })
    public readonly description: string;

    /** 上级ID */
    @ApiPropertyOptional({
        type: Number,
        name: 'parentId',
        description: '上级ID',
    })
    public readonly parentId: number;
}
export class UpdateMenuDto extends CreateMenuDto {
    @IsNotEmpty({ message: 'id不能为空' })
    @ApiProperty({
        type: Number,
        name: 'id',
        description: 'id',
    })
    public readonly id: number;
}